#include "AzRootRecord.h"

#include <QDebug>

/*!
  \class AzRootRecord
  \brief Верхний уровень записей. Содержит метаданные о записях.
  
  Является корневой записью, хранить метаинформацию о записях. \sa AzFieldList
  
*/

/*!
    \var AzRootRecord::mLogChanges
    Содержит true, если будет логироваться изменение записей.
    \sa setLogChanged

*/

/*!
  \fn  AzRootRecord::setLogChanged(bool val)
    Будем сохранять старые значения записи или нет.
    Не влияет на ранее записанные данные.
*/

//----------------------------------
/*!
 * \brief AzRootRecord::AzRootRecord
 * \param [in] parent Предок
 * Создает объект с предком парент 
 */
AzRootRecord::AzRootRecord(QObject* parent):QObject(parent),mFields(this)  {
    connect(&mFields,SIGNAL(fieldChanged(AzFieldList::FieldChangedSignalType,int)),this,SLOT(fieldChanged(AzFieldList::FieldChangedSignalType,int)));
}

/*!
 * \brief AzRootRecord::AzRootRecord
 * \param [in] src
 * Конструктор копирования
 */
AzRootRecord::AzRootRecord(const AzRootRecord& src):QObject(0),AzRecord(src) {
    copy(src);
}

AzRootRecord::~AzRootRecord() {
}

AzRootRecord& AzRootRecord::operator = (const AzRootRecord& src) {
    if (this == &src)
        return *this;
    copy(src);
    return *this;
}

void AzRootRecord::copy(const AzRootRecord& src) {
    mFields = src.mFields;
    mRecordData = src.mRecordData; //copy on write?
}

/*!
 * \brief AzRootRecord::fieldChanged
 * \param type тип изменений (вставка, модификация, удаление, полное обновление).
 * \param pos позиция, если имеет смысл.
 *
 */
void AzRootRecord::fieldChanged(AzFieldList::FieldChangedSignalType type, int pos) {
    switch (type) {
    case AzFieldList::OnInserted:
        insertColumn(pos,mFields.type(pos));
        break;
    default:
        qFatal("Not define field change");
    }
}


